package com.hsgene.dict.service;

import com.hsgene.common.util.result.ApiResult;
import com.hsgene.dict.condition.SysDictCondition;
import com.hsgene.dict.domain.SysDict;
import com.hsgene.dict.dto.SysDictDto;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @desc:字典
 * @author: fuxiang
 * @date: 2018/9/25 15:31
 */
public interface DictService {

    /**
     * @param id 字典逻辑主键id
     * @return com.hsgene.dict.dto.SysDictDto
     * @description 根据id查询字典信息
     * @author maodi
     * @createDate 2018/11/29 9:24
     */
    SysDictDto select(String id);

    /**
     * @param id 字典逻辑主键id
     * @return java.lang.Integer
     * @description 根据id查询字典数量
     * @author maodi
     * @createDate 2018/11/29 15:06
     */
    Integer queryCountById(String id);

    /**
     * @param id 字典逻辑主键id
     * @return void
     * @description 根据字典id删除字典
     * @author maodi
     * @createDate 2018/11/29 9:24
     */
    void delete(String id);

    /**
     * @param ids id数组
     * @return void
     * @description 根据字典id数组批量删除字典
     * @author maodi
     * @createDate 2018/11/29 15:00
     */
    void deleteMulti(String[] ids);

    /**
     * @param sysDict 字典信息
     * @return void
     * @description 新增字典信息
     * @author maodi
     * @createDate 2018/11/29 9:25
     */
    void insert(SysDict sysDict);

    /**
     * @param sysDict 字典信息
     * @return void
     * @description 修改字典信息
     * @author maodi
     * @createDate 2018/11/29 9:26
     */
    void update(SysDict sysDict);

    /**
     * @param condition 查询条件
     * @return java.util.List<com.hsgene.dict.dto.SysDictDto>
     * @description 字典列表/条件查询字典列表
     * @author maodi
     * @createDate 2018/11/29 10:25
     */
    List<SysDictDto> queryDicts(SysDictCondition condition);

    /**
     * @param condition 查询条件
     * @return java.lang.Integer
     * @description 查询字典数量/条件查询字典数量
     * @author maodi
     * @createDate 2018/11/29 9:27
     */
    Integer queryDictCount(SysDictCondition condition);

    /**
     * @param id         字典逻辑主键id
     * @param type       字典类型
     * @param label      字典值
     * @param dictNameId 字典名称id
     * @return java.lang.Integer
     * @description 根据值查询字典信息数量/排除当前id根据值查询字典信息数量
     * @author maodi
     * @createDate 2018/11/29 14:37
     */
    Integer queryCountByValue(String id, String type, String dictNameId, String label);

    /**
     * @param
     * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @description 获取字典所有分类
     * @author maodi
     * @createDate 2018/11/28 14:44
     */
    List<Map<String, Object>> queryAllClassifies();

    /**
     * @param id sys_dict_addtion的id
     * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @description 根据字典名称id获取上级节点
     * @author maodi
     * @createDate 2018/11/28 14:43
     */
    List<Map<String, Object>> queryValuesByLabel(String id);

    /**
     * @param id 字典逻辑主键id
     * @return java.lang.Integer
     * @description 查询字典使用数量
     * @author maodi
     * @createDate 2018/11/29 14:07
     */
    Integer queryDictUsedCountById(String id);

    /**
     * @param id 字典逻辑主键id
     * @return void
     * @description 增加一次字典使用数量
     * @author maodi
     * @createDate 2018/11/29 14:09
     */
    void addDictUsedCount(String id);

    /**
     * @param id 字典逻辑主键id
     * @return void
     * @description 减少一次字典使用数量
     * @author maodi
     * @createDate 2018/11/29 14:12
     */
    void reduceDictUsedCount(String id);

    /**
     * @param ids  字典逻辑主键id数组
     * @return void
     * @description 批量增加一次字典使用数量
     * @author maodi
     * @createDate 2018/11/29 14:09
     */
    void addMultiDictUsedCount(String[] ids);

    /**
     * @param ids  字典逻辑主键id数组
     * @return void
     * @description 批量减少一次字典使用数量
     * @author maodi
     * @createDate 2018/11/29 14:12
     */
    void reduceMultiDictUsedCount(String[] ids);

    /**
     * @param classifyId 分类id
     * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @description 根据字典分类id获取字典名称下拉框数据源
     * @author maodi
     * @createDate 2018/12/3 15:13
     */
    List<Map<String, Object>> queryLabelsByClassifyId(String classifyId);

    /**
     * 根据字典名称查询所有字典
     * @author jcl
     * @date 2018/12/4 16:00
     * @param dictAddtionId 字典名称的id
     * @return
     */
    ApiResult<List<SysDictDto>> valueByDictAddtionId(String dictAddtionId);

    /**
     * 根据ids获取字典list
     *
     * @param ids id数组
     * @return
     * @author FX
     * @date 2018/12/5 10:45
     */
    ApiResult<List<SysDictDto>> selectIds(String[] ids);
}
